package com.demo8.system.service;

import com.demo8.basic.domain.PageInfo;
import com.demo8.system.domain.dto.SysConfigDTO;
import com.demo8.system.domain.entity.SysConfig;
import com.demo8.system.domain.vo.SysConfigVO;
import org.apache.commons.lang3.tuple.Pair;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author mazhenjiang
 * @description 针对表【sys_config(参数配置表)】的数据库操作Service
 * @createDate 2025-09-19 16:02:34
 */
public interface ISysConfigService {

    PageInfo<SysConfig> selectConfigPage(SysConfigDTO sysConfigDTO);

    PageInfo<SysConfigVO> selectConfigVOPage(SysConfigDTO sysConfigDTO);

    PageInfo<SysConfigVO> selectConfigVOCustomConditionPage(SysConfigDTO sysConfigDTO);

    List<SysConfig> selectConfigList(SysConfigDTO sysConfigDTO);

    SysConfigVO selectOneById(Integer configId);

    List<SysConfigVO> selectListByParam(SysConfigDTO sysConfigDTO);

    /**
     * 是否启用验证码（）
     *
     * @return true 启用 false 不启用
     */
    Boolean selectCaptchaEnabled();

    /**
     * 根据键值查询参数配置
     *
     * @param configKey
     * @return
     */
    String selectConfigValueByKey(String configKey);

    /**
     * 校验参数key是否唯一
     *
     * @param sysConfigDTO
     * @return
     */
    Pair<Boolean, String> checkConfigKeyUnique(SysConfigDTO sysConfigDTO);

    int insertConfig(SysConfigDTO sysConfigDTO);

    int updateConfig(SysConfigDTO sysConfigDTO);

    void deleteConfigByIds(Long[] ids);

    void clearConfigCache();

    void reloadConfigCache();

    void refreshConfigCache();
    void export(SysConfigDTO sysConfigDTO,HttpServletResponse response);
    void exportBigData(SysConfigDTO sysConfigDTO,HttpServletResponse response);
}
